/**
 * 1. 封装一个中间件
 * 2. 对增加学生成绩接口生效
 * 3. 对删除学生成绩接口生效
 */
const jsonwebtoken = require('jsonwebtoken')
const whiteList = [ // 白名单
  // '/api/student/login',
  // '/api/student/register',
  // '/api/score/search'
]
module.exports = () => {
  return async (ctx, next) => {
    if (whiteList.includes(ctx.path)) {
      // 如果碰到白名单中的路由，直接跳过，不需要验证
      await next()
    } else {
      /**
       * 1. 获取token  ctx.request.header.authorization
       * 2. 解析token
       * 3. 如果解析成功，把成功的数据放置在一个命名空间上，方便其他中间件使用
       * 4. await next()
       */
      // 1
      const { authorization = '' } = ctx.request.header;
      const token = authorization;
      // console.log(token, 'token-----------------')
      try {
        // 2
        const user = jsonwebtoken.verify(token, ctx.app.config.keys);
        // 3
        //  console.log('user--------:', user)
        ctx.state.user = user;
        await next()
      } catch (err) {
        if (err.name == 'TokenExpiredError') {
          ctx.body = {
            code: -1,
            msg: 'token过期了'
          }
        } else {
          console.log('err-------:', err)
          ctx.body = {
            msg: err.message
          }
        }
      }
    }
  }
}